from django.shortcuts import render_to_response
from comunidadcyt.partners.models import Partners
from django.core.exceptions import ObjectDoesNotExist
from django.views.generic.create_update import update_object, create_object , delete_object
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.template.context import RequestContext
from comunidadcyt.util.permisos import puedeCrearPartner, puedeEditarPartner

def obtenerPartner(request,object_id):
    if int(object_id):
        try:
            objectoPartner = Partners.objects.get(id=object_id)
        except ObjectDoesNotExist:
            return 'No existe el objecto partner'
    else:
        return 'No existe el objecto partner'
    return objectoPartner

def inicio(request):
    request.breadcrumbs('Partners',request.path)
    return render_to_response(
        'partner/listarPartners.html',
        {'partners': Partners.objects.all(), 'puedeCrear': puedeCrearPartner(request.user)},
        context_instance = RequestContext(request)
    )

def ver(request, object_id):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    request.breadcrumbs([('Partners',reverse(inicio)),('Ver '+partner.Nombre_partner,request.path)])
    return render_to_response(
        'partner/detalles.html',
        {'Partner': partner, 'puedeEditar': puedeEditarPartner(request.user)},
        context_instance = RequestContext(request)
    )

def crear(request):
    if puedeCrearPartner(request.user):
        request.breadcrumbs([('Partners',reverse(inicio)),('Crear',request.path)])
        return create_object(
            request,
            model = Partners,
            template_name = 'partner/partner.html',
            post_save_redirect = '/comunidadcyt/partners/'
        )

    return HttpResponseRedirect(reverse(inicio))

def editar(request, object_id):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    if puedeEditarPartner(request.user):
        request.breadcrumbs([('Partners',reverse(inicio)),('Editar '+partner.Nombre_partner,request.path)])
        return update_object(
            request,
            model = Partners,
            template_name = 'partner/partner.html',
            post_save_redirect = '/comunidadcyt/partners',
            object_id = object_id
        )

    return HttpResponseRedirect(reverse(inicio))

def borrar(request, object_id):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    if puedeEditarPartner(request.user):
        request.breadcrumbs([('Partners',reverse(inicio)),('Borrar '+partner.Nombre_partner,request.path)])
        return delete_object(
            request,
            model = Partners,
            template_name = 'partner/confirm_delete.html',
            post_delete_redirect = '/comunidadcyt/partners',
            object_id = object_id
        )

    return HttpResponseRedirect(reverse(inicio))

def obtenerDeptos(partner):
    list_grupos = []
    list_departamentos = []
    for proyecto in partner.proyectos.all():
        list = proyecto.Departamentos.all()
        for obj in list:
            if not list_departamentos.__contains__(obj):
                list_departamentos += [obj]
        for proy in proyecto.Grupos.all():
            if not list_grupos.__contains__(proy):
                list_grupos += [proy]
    for grupo in list_grupos:
        if not list_departamentos.__contains__(grupo.Departamento):
            list_departamentos += [grupo.Departamento]
    return list_departamentos
    
def obtenerGrupos(partner):
    list_grupos = []
    for proyecto in partner.proyectos.all():
        for proy in proyecto.Grupos.all():
            if not list_grupos.__contains__(proy):
                list_grupos += [proy]
    return list_grupos
    
def obtenerLineas(partner):
    list_lineas = []
    for proyecto in partner.proyectos.all():
        for linea in proyecto.Lineas.all():
            if not list_lineas.__contains__(linea):
                list_lineas += [linea] 
    return list_lineas

def listardeptos(request, object_id=0):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    request.breadcrumbs([('Partners',reverse(inicio)),('Listar Departamentos de '+partner.Nombre_partner,request.path)])
    return render_to_response('partner/deptos.html', {'Partner': partner, 'list_deptos': obtenerDeptos(partner), 'user': request.user}, context_instance=RequestContext(request))

def listargrupos(request, object_id=0):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    request.breadcrumbs([('Partners',reverse(inicio)),('Listar Grupos de '+partner.Nombre_partner,request.path)])
    return render_to_response('partner/grupos.html', {'Partner': partner, 'list_grupos': obtenerGrupos(partner), 'user': request.user}, context_instance=RequestContext(request))

def listarproyectos(request, object_id=0):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    request.breadcrumbs([('Partners',reverse(inicio)),('Listar Proyectos de '+partner.Nombre_partner,request.path)])
    return render_to_response('partner/proyectos.html', {'Partner': partner, 'list_proyectos': partner.proyectos.all(), 'user': request.user}, context_instance=RequestContext(request))

def listarlineas(request, object_id=0):
    partner = obtenerPartner(request, object_id)
    if partner == 'No existe el objecto partner':
        return render_to_response('error.html',{'error':'No existe el objecto partner', 'archivo': 'view de partners', 'linea': 'linea 20'})

    request.breadcrumbs([('Partners',reverse(inicio)),('Listar Lineas de '+partner.Nombre_partner,request.path)])
    return render_to_response('partner/lineas.html', {'Partner': partner, 'list_lineas': obtenerLineas(partner), 'user': request.user}, context_instance=RequestContext(request))

    